package com.jms.framework.jdbc.transaction;

import com.jms.framework.jdbc.DataSourceManagement;

import javax.sql.DataSource;
import java.sql.Connection;

/**
 * 实现此接口可以自定义事务管理
 * 规范：
 * 1.实现此接口的类必须有无参的构造函数
 */
public interface TransactionManagement {

    static DataSource getDataSource() {
        return DataSourceManagement.getInstance().getDataSource();
    }

    /**
     * 开始一个新的事务
     * 此方法应确保在当前上下文中初始化事务，并准备进行数据库操作
     */
    void begin();

    /**
     * 提交当前事务
     * 此方法应确保所有在事务中的更改都被持久化
     */
    void commit();

    /**
     * 回滚当前事务
     * 此方法应确保撤销事务中所有未提交的更改
     */
    void rollback();

    /**
     * 关闭当前事务
     * 此方法应确保释放与事务相关的所有资源
     */
    void close();

    /**
     * 检查当前是否有事务处于活动状态
     *
     * @return 如果当前有事务处于活动状态，则返回true；否则返回false
     */
    boolean transactionIsActive();

    /**
     * 检查事务是否处于开启状态
     *
     * @return 如果事务处于开启状态，则返回true；否则返回false
     */
    boolean transactionIsOpen();

    /**
     * 获取当前事务的数据库连接
     *
     * @return 当前事务的数据库连接对象
     */
    Connection getCurrentConnection();
}
